package com.es.designmode.memento;

/**
 * 备忘录模式
 * 在不破坏封装性的前提下，捕获一个对象的内部状态，并在该对象之外保存这个状态
 * 这样以后就可以将该对象恢复为原先保存的状态
 * <p>
 * 很好理解，就是用一个类管理备份的状态
 *
 * @author Will
 */
public class ClientSide {

    public static void main(String[] args) {

        // 初始状态为 on
        Originator o = new Originator();
        o.setState("on");
        o.show();

        // 保存状态时，由于有了很好的封装
        // 可以隐藏 Originator的实现细节
        CareTaker c = new CareTaker();
        c.setMemento(o.createMemento());

        //改变状态
        o.setState("off");
        o.show();

        // 恢复初始状态
        o.setMemento(c.getMemento());
        o.show();

    }
}
